const puppeteer=require('puppeteer');
let request=require('request-promise-native');
const fs = require('fs');
const axios=require('axios');
const moment = require('moment');
const now = moment().format('YYYYMMDD');

// 使用puppeteer.launch启动Chrome
async function main(){
	
	const bro=await puppeteer.launch({//代表浏览器
	  headless:false,    // 有浏览器界面启动
	  slowMo:120,      // 放慢浏览器执行速度，方便测试观察
	  args:[
	    '-no-sandbox',
	    '--window-size=1366,768'
	  ],
	});
	const page=await bro.newPage();//创建新窗口 新页面
	page.setViewport({width: 1366, height: 768})
	//跳转页面
	await page.goto('https://www.bilibili.com/anime/index/#season_version=-1&area=-1&is_finish=-1&copyright=-1&season_status=-1&season_month=-1&year=-1&style_id=-1&order=3&st=1&sort=0&page=1');
		
		
	return new Promise((resolve, reject)=>{
			async function forFunction(){
					extractData(page)  //抓取数据
					var nextPage = await page.$('.next-page')//获取下一页按钮
					if(nextPage){//跳转下一页 并且调用自己
						await nextPage.click()
						setTimeout(function(){
							forFunction()	
						},50)
							
					}else{
						resolve({status:200,msg:'抓取完成'})
						//没有下一页时关闭页面 关闭浏览器
						await page.close();
						await bro.close();
					}
			 }
			 // 执行任务
			 forFunction() 
	    })
		
	   // extractData(page,1,10) //测试时可以直接使用这里 注释掉 上面部分 

};	


async function extractData(page){
	console.log(`开始提取数据...`)
var data = await page.evaluate(() => {
			let result =[] //结果集
			let $ = window.$
			let $item = $('.bangumi-item'); // 要找到的目标元素li
			  
			  $item.each((index, item) => {
			    let $el = $(item)
				
				  let imgUrl = $el.find('.common-lazy-img').find('img').prop('src')
				  imgUrl = imgUrl.replace('webp','jpg')
			  
			    // 需要保存的数据
			    result.push({
					title: $el.find('.bangumi-title').text(),//标题
					titleLink:$el.find('.bangumi-title').prop('href'),//链接
					imgUrl: imgUrl,//图片地址
					like:$el.find('.shadow').text(),//追番数
					exclusive:$el.find('.corner-tag').text(),//会员或者独家
					episode:$el.find('.pub-info').text()//更新到多少话了
				});
			  });
			  // 返回数据
			  return result
	   })
	  // console.log(data)
	  //写数据 与 上传
	 writeFile(data)
}

//写入文件
async function writeFile(data){
	console.log('开始保存提交数据...')
	
	let upData = {
		action:'bilibili',
		data:data
	}
	axios.post('https://ff5f406c-368c-4527-9a5a-3e83eab9e589.bspapp.com/http/collector', upData).then(res => {
		  console.log(res.data)
	}).catch(error => {
		console.log(error) 
	})   //查询失败返回的值
	
	
	let formatData = JSON.stringify(data,null, 4);//格式化数据
	fs.writeFile(`./log/bilibili${now}.json`, formatData, {'encoding':'utf8','flag':'a'}, (err) => {//flag:a 累加写入 w 清空写入
	    if (err){
			console.log(err)  
		  } 
	    console.log('已写入json');
	});
	
	
}

//main()
module.exports =  {main}


